package com.yan.design.two.behavior.s1;

/**
 * 1. 模板模式
 *      牛奶抽象类
 * @author shengren.yan
 * @create 2022-08-06
 */
public abstract class MilkTemplate {

    // 模板方法可以使用 final ，子类不去覆盖
    final void make(){
        selectA();
        selectB();
        selectC();
        // 钩子方法
        if(addShow()){
            selectD();
        }
        selectE();
    }

    // 选牛奶
    public void selectA(){
        System.out.println("1.选牛奶。。。");
    }

    // 加配料
    public abstract void selectB();

    // 装盒
    public void selectC(){
        System.out.println("3.装盒。。。");
    }

    // 钩子函数
    boolean addShow(){
        return true;
    }

    // 带餐具
    public abstract void selectD();

    // 完成
    public void selectE(){
        System.out.println("5.完成。。。");
    }


}
